/**
 * Copyright (c) 1992-2012
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * 
 * $Id: BaseMapper.java 2012-06-07 Ashton.J $
 */
package org.ashton.mybatis.base;

import java.io.Serializable;
import java.util.List;

import org.apache.ibatis.session.RowBounds;
import org.ashton.mybatis.page.Page;



/**
 * 泛型Mapper接口<p>
 * 
 * @author  Ashton.J
 * @version v1.0
 * 
 * @param <T>  实体类型
 * @param <PK> 主键类型
 */
public interface BaseMapper<T, PK extends Serializable> {
    
    /**
     * 持久化对象
     * 
     * @param newInstance
     */
    public void insert(T newInstance);
    
    /** 
     * 主键查询
     * 
     * @param id    主键
     * @return
     */
    public T get(PK id);

    /**
     * 更新游离态对象
     * 
     * @param transientObject
     */
    public void update(T transientObject);

    /**
     * 按主键删除对象
     * 
     * @param pk
     */
    public void delete(PK pk);
    
    /**
     * 分页查询
     * 
     * @param page  分页对象，已设置分页参数
     * @param pageinateInfo 分页查询信息
     * @return
     */
    public Long getPageCount(Page<T> page);

    /**
     * 分页查询
     * 
     * @param page  分页对象，已设置分页参数
     * @param pageinateInfo 分页查询信息
     * @return
     */
    public List<T> getPageList(Page<T> page, RowBounds rowBounds);
    
}
